package vip.xiaonuo.smzq.modular.deom;

import cn.hutool.core.io.resource.ResourceUtil;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.Includes;
import com.deepoove.poi.exception.RenderException;
import lombok.extern.slf4j.Slf4j;

import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 描述： word合并
 * 日期： 2024/04/27 10:36
 * 作者： eomer
 **/
@Slf4j
public class WordMergeUtil {

    // 合并模板存放到本地
    private final static String TEMPLATE_PATH = "template"+ File.separator+"merged_template.docx";

    /**
     * 合并word
     *
     * @param inputStreamList
     * @param outputStream
     */
    public static void mergeWord(List<InputStream> inputStreamList, OutputStream outputStream) {
        try {
            // 创建一个 XWPFTemplate 对象
            InputStream stream = ResourceUtil.getStream(TEMPLATE_PATH);
            if (stream == null) {
                log.info("合并模板不存在");
                return;
            }
            XWPFTemplate template = XWPFTemplate.compile(stream);
            // 可以添加更多的文档路径
            // 将合并后的文档插入模板中
            Map<String, Object> map = new HashMap<>();
            for (int i = 0; i < inputStreamList.size(); i++) {
                InputStream inputStream = inputStreamList.get(i);
                map.put("mergeDocument" + (i + 1), Includes.ofStream(inputStream).create());
            }
            template.render(map);
            // 输出合并后的 Word 文档
            //FileOutputStream out = new FileOutputStream("D:\\file\\test\\merged_document.docx");
            template.write(outputStream);
            template.close();
            System.out.println("合并完成！");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (RenderException e) {
            java.util.regex.Pattern patten = java.util.regex.Pattern.compile("\\d+");
            java.util.regex.Matcher matcher = patten.matcher(e.getMessage());
            if (matcher.find()) {
                int index = Integer.parseInt(matcher.group());
                String reportName ="";
                throw new RuntimeException("生成总体报告失败，请检查或重新生成" + reportName + "文档");
            }
        }

    }

    private static void mergeWordTest() {
        try {
            // 创建一个 XWPFTemplate 对象
            XWPFTemplate template = XWPFTemplate.compile("C:\\Users\\全权\\Desktop\\merged_template.docx");
            // 可以添加更多的文档路径
            // 将合并后的文档插入模板中
            Map<String, Object> map = new HashMap<>();
            map.put("mergeDocument1", Includes.ofLocal("E:\\file\\浏览器下载\\exportKszycl2.doc").create());
            map.put("mergeDocument2", Includes.ofLocal("E:\\file\\浏览器下载\\exportKszycl2 (33).doc").create());
            map.put("mergeDocument3", Includes.ofLocal("E:\\file\\浏览器下载\\exportKszycl2 (33).doc").create());
            map.put("mergeDocument4", Includes.ofLocal("E:\\file\\浏览器下载\\exportKszycl2 (33).doc").create());
            map.put("mergeDocument5", Includes.ofLocal("E:\\file\\浏览器下载\\exportKszycl2 (33).doc").create());
            template.render(map);
            // 输出合并后的 Word 文档
            FileOutputStream out = new FileOutputStream("C:\\Users\\全权\\Desktop\\merged_document33.docx");
            template.write(out);
            out.flush();
            out.close();
            template.close();

            System.out.println("合并完成！");
        } catch (IOException e) {
            e.printStackTrace();
        }
}


    public static void main(String[] args) {
        mergeWordTest();
    }

}
